home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / AccessMem.C next >
C/C++ Source or Header  |  1992-07-17  |  3KB  |  139 lines

  1. #ifdef __GNUG__
  2. #pragma implementation
  3. #endif
  4.  
  5. #include "AccessMem.h"
  6.  
  7. #include "Class.h"
  8. #include "Exception.h"
  9.  
  10. //---- AccessMembers ---------------------------------------------------------
  11.  
  12. AccessMembers::AccessMembers()
  13. {
  14. }
  15.  
  16. AccessMembers::~AccessMembers()
  17. {
  18. }
  19.  
  20. void AccessMembers::ClassName(char*)
  21. {
  22. }
  23.  
  24. void AccessMembers::Member(char *, int, int, int, Class*, bool, bool)
  25. {
  26. }
  27.  
  28. void AccessMembers::ScanMembers(Object *o, int first, va_list ap, int n)
  29. {
  30.     int len, tag, size;
  31.     char *name;
  32.     Class *cl;
  33.     u_long th= (u_long) o, offset;
  34.     bool global= FALSE, lenglobal= FALSE;
  35.     
  36.     if (o && o->IsA())
  37.     size= o->IsA()->Size();
  38.     else
  39.     size= 999999; // very large (good idea ???)
  40.     
  41.     for (int i= 0; i < n; i++) {
  42.     if (i == 0)
  43.         tag= first;
  44.     else
  45.         tag= va_arg(ap, int);
  46.     if (tag == T_SIM)
  47.         tag= 0;
  48.     name= va_arg(ap, char*);
  49.     cl= va_arg(ap, Class*);
  50.     offset= va_arg(ap, u_long);
  51.     
  52.     if (offset >= th && offset < th+size) {
  53.         offset-= th;
  54.         global= FALSE;
  55.     } else
  56.         global= TRUE;
  57.  
  58.     if (tag & T_VEC) {
  59.         len= (int)va_arg(ap, u_long);
  60.         if (len >= th && len < th+size) {
  61.         len-= (int)th;
  62.         lenglobal= FALSE;
  63.         } else
  64.         lenglobal= TRUE;
  65.     } else if (tag & T_ARR)
  66.         len= va_arg(ap, int);
  67.     else 
  68.         len= -1;
  69.  
  70.     Member(name, (int) offset, len, tag, cl, global, lenglobal);
  71.     }
  72.     va_end(ap);
  73. }
  74.  
  75. //---- AccessObjPtrs ----------------------------------------------------------
  76.  
  77. AccessObjPtrs::AccessObjPtrs(Object *op)
  78.     inObject= op; 
  79. }
  80.     
  81. void AccessObjPtrs::ForObject(Object *op)
  82.     inObject= op; 
  83. }
  84.  
  85. void AccessObjPtrs::Member(char *name, int offset, int offsetOrLen, int type,
  86.                     Class *cl, bool global, bool lenglobal)
  87. {
  88.     if (cl && cl->TestFlag(eClassObject)) {
  89.     if ((type & T_PTR2) && (type & (T_ARR | T_VEC))) {
  90.         Object **ov;
  91.         int l= 0;
  92.  
  93.         if (type & T_ARR)
  94.         l= offsetOrLen;
  95.         else if (type & T_VEC) { 
  96.         void *ll;
  97.         if (lenglobal)
  98.             ll= (void*) offsetOrLen;
  99.         else
  100.             ll= (void*) ((u_long) inObject + (u_long) offsetOrLen);
  101.             
  102.         TRY {
  103.             l= *((int*)ll);
  104.         } CATCH(ex) {
  105.             l= -1;
  106.         } ENDTRY;
  107.         }
  108.  
  109.         if (global)
  110.         ov= *(Object***) offset;
  111.         else
  112.         ov= *(Object***)((u_long) inObject + (u_long) offset);
  113.  
  114.         if (ov && l > 0)
  115.         for (int i= 0; i < l; i++)
  116.             if (ov[i]) 
  117.             FoundPointer(ov[i], name, i, FALSE);
  118.  
  119.     } else if (type & T_PTR) {
  120.         if (global)
  121.         FoundPointer(*(Object**)((u_long) offset), name, -1, TRUE);
  122.         else
  123.         FoundPointer(*(Object**)((u_long) inObject + (u_long) offset), name, -1, FALSE);
  124.     } else if (type == 0) {     // inline Object
  125.         if (global)
  126.         FoundPointer((Object*)((u_long) offset), name, -1, TRUE);
  127.         else
  128.         FoundPointer((Object*)((u_long) inObject + (u_long) offset), name, -1, FALSE);
  129.     }
  130.     }
  131. }
  132.  
  133. void AccessObjPtrs::FoundPointer(Object*, char*, int, bool)
  134. {
  135. }
  136.  
  137.